package cn.iocoder.yudao.module.ai.graph.node.customerservice;

import com.alibaba.cloud.ai.graph.OverAllState;
import com.alibaba.cloud.ai.graph.action.NodeAction;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.HashMap;
import java.util.Map;

/**
 * 满意度调查节点 - 收集客户反馈（可选的第二个打断点）
 * 
 * 这个节点可以配置为：
 * 1. 自动发送满意度调查
 * 2. 或作为打断点，等待客户填写满意度
 * 
 * @author yudao
 * @since 2025/10/17
 */
public class SatisfactionSurveyNode implements NodeAction {

    private static final Logger logger = LoggerFactory.getLogger(SatisfactionSurveyNode.class);

    @Override
    public Map<String, Object> apply(OverAllState state) {
        logger.info("=== SatisfactionSurveyNode 开始执行 ===");
        
        String customerId = state.value("customer_id", "");
        String sendStatus = state.value("send_status", "");
        
        if (!"success".equals(sendStatus)) {
            logger.warn("回复发送失败，跳过满意度调查");
            return Map.of("survey_skipped", true);
        }
        
        // 检查是否有满意度反馈（如果配置为打断点）
        Map<String, Object> feedBackData = state.humanFeedback().data();
        
        if (feedBackData != null && !feedBackData.isEmpty()) {
            // 从打断恢复，获取客户满意度
            Integer score = (Integer) feedBackData.getOrDefault("satisfaction_score", 0);
            String feedback = (String) feedBackData.getOrDefault("satisfaction_feedback", "");
            
            logger.info("📊 收到客户满意度反馈");
            logger.info("客户 ID：{}", customerId);
            logger.info("满意度评分：{}/5", score);
            if (!feedback.isEmpty()) {
                logger.info("客户反馈：{}", feedback);
            }
            
            Map<String, Object> resultMap = new HashMap<>();
            resultMap.put("satisfaction_score", score);
            resultMap.put("satisfaction_feedback", feedback);
            resultMap.put("survey_completed", true);
            
            // 如果满意度低，记录需要跟进
            if (score != null && score < 3) {
                logger.warn("⚠️  客户满意度较低，需要跟进");
                resultMap.put("requires_followup", true);
            }
            
            return resultMap;
        } else {
            // 自动模式：发送满意度调查链接
            logger.info("📨 发送满意度调查给客户：{}", customerId);
            sendSurveyLink(customerId);
            
            return Map.of(
                "survey_sent", true,
                "survey_link_sent_to", customerId
            );
        }
    }

    /**
     * 发送满意度调查链接
     */
    private void sendSurveyLink(String customerId) {
        String surveyLink = "https://example.com/survey?customer=" + customerId;
        logger.info("🔗 满意度调查链接：{}", surveyLink);
        // 实际项目中，这里应该通过短信或消息发送调查链接
    }
}

